#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "Timer.h"

#define Echo       GPIO_Pin_0
#define Trig       GPIO_Pin_1
#define Port       GPIOC

uint16_t time,etime;

void HCSR04_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
    GPIO_InitStructure.GPIO_Pin = Echo;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(Port,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin = Trig;
    GPIO_Init(Port,&GPIO_InitStructure);
    
    GPIO_ResetBits(Port,Trig);
    TIM3_Init();
}

uint32_t HCSR04_Measure_mm(void)
{
    uint32_t Distance = 0;
    GPIO_SetBits(Port,Trig);
    Delay_us(10);
    GPIO_ResetBits(Port,Trig);
    while(GPIO_ReadInputDataBit(Port,Echo) == 0);
    time = 0;
    while(GPIO_ReadInputDataBit(Port,Echo) == 1);
    etime = time;
    
    Distance = ((etime * 340) / 2) / 100; 
    
    return Distance;
}



void TIM3_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM3,TIM_IT_Update) == SET)
    {
        time++;
        TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
    }
}

